package middleware

import (
	"runtime/debug"

	"github.com/gin-gonic/gin"
)

// recover错误，转string
func errorToString(r interface{}) string {
	switch v := r.(type) {
	case error:
		return v.Error()
	default:
		return r.(string)
	}
}

func Recover(c *gin.Context) {
	defer func() {
		if r := recover(); r != nil {
			debug.PrintStack()
			c.JSON(200, gin.H{
				"status":  -1,
				"message": r,
				"data":    string(debug.Stack()),
			})

			//终止后续接口调用，不加的话recover到异常后，还会继续执行接口里后续代码
			c.Abort()
		}
	}()
	//加载完 defer recover，继续后续接口调用
	c.Next()
}
